package cn.wzc.crystal.platform.curd;

import cn.wzc.crystal.platform.query.QueryPageResult;
import cn.wzc.crystal.platform.support.ApiResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 一个实体的增删改查操作
 * 适用于:简单的数据维护场景
 *
 * @param <Dto>
 */
public interface CrudController<Dto> {

	/**
	 * 查询数据
	 *
	 * @param page     分页
	 * @param size     页长
	 * @param criteria 查询条件
	 * @return 查询结果
	 */
	@GetMapping("/query")
	QueryPageResult<Dto> query(@RequestParam(value = "page") Integer page,
							   @RequestParam(value = "size") Integer size,
							   @RequestParam Map<String, Object> criteria);


	/**
	 * 列出所有
	 *
	 * @param criteria 查询条件
	 * @return 查询结果
	 */
	@GetMapping("/list")
	List<Dto> list(Map<String, Object> criteria);

	/**
	 * 获取单条数据
	 *
	 * @param id 要获取的数据ID
	 * @return 查询结果
	 */
	@GetMapping("/{id}")
	Dto get(@PathVariable(value = "id") Long id);

	/**
	 * 保存操作
	 *
	 * @param saveRequest 保存请求数据
	 * @return 保存结果
	 */
	@PostMapping
	ApiResult save(@RequestBody @Validated Dto saveRequest);

	/**
	 * 删除操作
	 *
	 * @param id 要删除的数据ID
	 * @return 删除结果
	 */
	@DeleteMapping("/{id}")
	ApiResult delete(@PathVariable(value = "id") String id);


}
